From 7618219d8b9c90b5b50c5b16e502f4fc879a0540 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Sat, 17 Jan 2009 12:34:09 +0000 Subject: [PATCH] (find-buffer-file-type-coding-system): If `(car target)' does not exist as a file, try again with its basename replaced by `(cdr target)'. Fixes Bug #1853. --- lisp/dos-w32.el | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/lisp/dos-w32.el b/lisp/dos-w32.el index 9e9c386d205..ae6ed5dc366 100644 --- a/lisp/dos-w32.el +++ b/lisp/dos-w32.el @@ -129,9 +129,9 @@ set to the appropriate coding system, and the value of `buffer-file-coding-system' will be used when writing the file." (let ((op (nth 0 command)) - (target) (binary nil) (text nil) - (undecided nil) (undecided-unix nil)) + (undecided nil) (undecided-unix nil) + target target-buf) (cond ((eq op 'insert-file-contents) (setq target (nth 1 command)) ;; If TARGET is a cons cell, it has the form (FILENAME . BUFFER), @@ -140,7 +140,11 @@ set to the appropriate coding system, and the value of ;; arguments is used, e.g., in arc-mode.el.) This function ;; doesn't care about the contents, it only looks at the file's ;; name, which is the CAR of the cons cell. - (if (consp target) (setq target (car target))) + (when (consp target) + (setq target-buf + (and (bufferp (cdr target)) + (buffer-name (cdr target)))) + (setq target (car target))) ;; First check for a file name that indicates ;; it is truly binary. (setq binary (find-buffer-file-type target)) @@ -149,7 +153,17 @@ set to the appropriate coding system, and the value of ((find-buffer-file-type-match target) (setq text t)) ;; For any other existing file, decide based on contents. - ((file-exists-p target) + ((or + (file-exists-p target) + ;; If TARGET does not exist as a file, replace its + ;; base name with TARGET-BUF and try again. This + ;; is for jka-compr's sake, which strips the + ;; compression (.gz etc.) extension from the + ;; FILENAME, but leaves it in the BUFFER's name. + (and (stringp target-buf) + (file-exists-p + (expand-file-name target-buf + (file-name-directory target))))) (setq undecided t)) ;; Next check for a non-DOS file system. ((untranslated-file-p target) -- 2.30.2